package com.dapangdong.testdemo.controller.test;

import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONUtil;
import com.dapangdong.testdemo.Entiy.User;
import com.dapangdong.testdemo.annotation.Operation;
import com.dapangdong.testdemo.utils.ReactiveAdderUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.*;
import java.util.function.Consumer;

/**
 * <p>
 *
 * </p>
 *
 * @author : yhd
 * @program: gulimall
 * @since : 2023-04-10 09:55
 */
@Slf4j
@Api(tags = "重定向")
@RestController
@RequestMapping(value = "/redirect")
public class RedirectController {

    @ApiOperation(value = "测试")
    @GetMapping(value = "/test")
    public ResponseEntity<Object> test() {
        String redirectUrl = "https://www.example.com/";
        return ResponseEntity.status(HttpStatus.FOUND).header("Location", redirectUrl).build();
    }

    @ApiOperation(value = "minio文件服务器")
    @GetMapping(value = "/minio")
    public ResponseEntity<Object> minio() {
        String redirectUrl = "http://101.33.204.11:9090/login";
        return ResponseEntity.status(HttpStatus.FOUND).header("Location", redirectUrl).build();
    }

    @ApiOperation(value = "获取请求数据")
    @GetMapping(value = "/request")
    public Object request(HttpServletRequest request) {
        /*
          当我们在浏览器地址栏上输入：locahost:8080/Test/test.html?name=kiku
          request 对象通过以下方法来获取请求路径：
          getServerName()：获取服务器名，localhost，返回对象是 String；
          getServerPort()：获取服务器端口号，8080，返回对象是 int；
          getContextPath()：获取项目名，/Test，返回对象是 String；
          getServletPath()：获取Servlet路径，/test.html，返回对象是 String；
          getQueryString()：获取参数部分，即问号后面的部分：name=zhang，返回对象是 String；
          getRequestURI()：获取请求URI，等于项目名+Servlet路径：/Test/test.html，返回对象是 String；
          getRequestURL()：获取请求URL，等于不包含参数的整个请求路径：localhost:8080/Test/test.html，返回对象是 StringBuffer；
          request.getRemoteAddr()：获取服务器的 IP，localhost 对应 IP 为 127.0.0.1，返回对象是 String；
         */

        String tenant = request.getHeader("tenant");
        // 获取前端请求的完整URL地址
        String url = request.getRequestURL().toString();

        // 获取前端请求的域名地址（不包括协议和端口号）
        String domain = request.getServerName();
        //服务器的 IP
        String remoteAdder = request.getRemoteAddr();

        // 获取前端请求的协议（http或https）
        String protocol = request.getScheme();

        //请求方式
        String requestMethod = request.getMethod();

        // 获取前端请求的端口号
        int port = request.getServerPort();

        Map<String,Object> returnMap = new HashMap<>(10);
        returnMap.put("请求头",tenant);
        returnMap.put("完整URL地址",url);
        returnMap.put("域名地址",domain);
        returnMap.put("服务器的IP",remoteAdder);
        returnMap.put("请求的端口号",port);
        returnMap.put("前端请求的协议",protocol);
        returnMap.put("请求方式",requestMethod);

        log.info("请求头:{}", tenant);
        log.info("完整URL地址:{}", url);
        log.info("域名地址:{}", domain);
        log.info("服务器的IP:{}", remoteAdder);
        log.info("请求的端口号:{}", port);
        log.info("前端请求的协议:{}", protocol);
        log.info("请求方式:{}", requestMethod);
        return returnMap;
    }


    // 定义一个Consumer对象
    private final static Consumer<String> consumer = (optLog) -> {
        System.out.println("操作人：" + optLog + 1);
    };

    public static void main(String[] args) {


// 调用consumer.accept()方法对optLogDTO对象进行处理
        consumer.accept("admin");
    }

}
